package svg

import (
	"fmt"
	"net/http"
	"serve/model"
	"strconv"

	"github.com/gin-gonic/gin"
)

func RegisterRouter(r *gin.RouterGroup) {
	r.GET("/list", List)
	r.GET("/img", Img)
	r.POST("/add", Add)
	r.POST("/del", Del)
	r.POST("/update", Update)

}

// 根据id获取，svg的内容
func Img(c *gin.Context) {
	var db = model.DB
	var svg model.Svg
	id := c.DefaultQuery("id", "")
	if len(id) == 0 {
		c.JSON(http.StatusOK, gin.H{"code": 400, "msg": "参数错误"})
		return
	}
	result := db.Where("id=?", id).Find(&svg)
	c.Header("Content-Type", "image/svg+xml")
	if result.Error != nil {
		c.JSON(http.StatusOK, gin.H{"data": nil, "code": 400, "msg": result.Error})
		return
	}
	// image/svg+xml
	c.Data(http.StatusOK, "Content-Type", []byte(svg.Content))
}

// List  获取列表
func List(c *gin.Context) {
	var db = model.DB
	var svg []model.Svg
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "0"))
	currentPage, _ := strconv.Atoi(c.DefaultQuery("currentPage", "0"))
	keyword := c.DefaultQuery("keyword", "")
	pid := c.DefaultQuery("pid", "")
	iterid := c.DefaultQuery("iterid", "")
	if pageSize <= 0 {
		pageSize = 20
	}
	if currentPage <= 0 {
		currentPage = 1
	}
	var count int
	result := db.Model(&model.Svg{}).Order("created_at desc")
	if len(keyword) > 0 {
		result = result.Where("name LIKE ?  OR  icon_class LIKE ?", "%"+keyword+"%", "%"+keyword+"%")
	}
	if len(pid) > 0 {
		result = result.Where("pid = ?", pid)
	}
	if len(iterid) > 0 {
		result = result.Where("iterid=?", iterid)
	}
	result.Count(&count)
	result.Offset(pageSize * (currentPage - 1)).Limit(pageSize).Find(&svg)

	if result.Error != nil {
		c.JSON(http.StatusOK, gin.H{"data": nil, "code": 400, "msg": result.Error})
		return
	}
	c.JSON(http.StatusOK, gin.H{"data": gin.H{"count": count, "list": svg, "pageSize": pageSize, "currentPage": currentPage}, "code": 200})
}

func Add(c *gin.Context) {
	var db = model.DB
	var p model.Svg
	// res := c.ShouldBindQuery(&p)
	if c.ShouldBind(&p) == nil {
		result := db.Create(&p)
		if result.Error != nil {
			c.JSON(http.StatusOK, gin.H{"data": nil, "code": 400, "msg": fmt.Sprint(result.Error)})
			return
		}
		c.JSON(http.StatusOK, gin.H{"data": p, "code": 200})
	} else {
		c.JSON(http.StatusOK, gin.H{"code": 400, "msg": "参数错误"})
	}
}

func Del(c *gin.Context) {
	var db = model.DB
	var p = model.Svg{}
	id := c.PostForm("id")

	if len(id) == 0 {
		c.JSON(http.StatusOK, gin.H{"code": 400, "msg": "参数错误"})
		return
	}
	result := db.Unscoped().Where("id=?", id).Delete(p)
	if result.Error != nil {
		c.JSON(http.StatusOK, gin.H{"data": nil, "code": 400, "msg": fmt.Sprint(result.Error)})
		return
	}
	c.JSON(http.StatusOK, gin.H{"data": p, "code": 200})
}

func Update(c *gin.Context) {
	var db = model.DB
	var p = model.Svg{}
	id := c.PostForm("ID")
	if len(id) == 0 {
		c.JSON(http.StatusOK, gin.H{"code": 400, "msg": "参数错误"})
		return
	}
	if c.ShouldBind(&p) == nil {
		fmt.Println(p)
		p.DeletedAt = nil
		result := db.Model(&model.Svg{}).Where("id=?", id).Updates(&p)
		if result.Error != nil {
			c.JSON(http.StatusOK, gin.H{"data": nil, "code": 400, "msg": "iconClass不能重复," + fmt.Sprint(result.Error)})
			return
		}
		c.JSON(http.StatusOK, gin.H{"data": p, "code": 200})
	} else {
		c.JSON(http.StatusOK, gin.H{"code": 400, "msg": "参数错误"})
	}
}
